
# ✨Три в ряд✨
---
#
Добро пожаловать в документацию по игре "3 в ряд"! В этом документе мы подробно рассмотрим механику и логику игры, а также ее основные функции и правила.
#
## Содержание
1. Описание игры
2. Технологии
3. Правила игры
4. Квадраты (фишки) в игре
5. Очки и рейтинг
6. Интерфейс
7. Консоль

![Превью игры](https://github.com/kakbutos/MatchThree/blob/feature/COD-36/packages/client/src/assets/images/preview-logo.png?raw=true)

----
### Описание игры
"3 в ряд" - это игра-головоломка, в которой ваша задача состоит в том, чтобы перемещать квадраты на игровом поле таким образом, чтобы образовывались группы из трех или более одноцветных квадратов в ряд по горизонтали или вертикали.

---
### Технологии
Игра написана на фреймворке React с использованием языка TypeScript. Для отображения игры используется самописный движок на canvas. Благодаря использованию этих технологий, мы можем создать масштабируемый и поддерживаемый код, а также обеспечить более безопасную разработку с помощью проверки типов.

---

### Правила игры
При инициализации игры создается игровое поле размером 8 на 8, на котором появляются разноцветные квадраты одинакового размера. Изначально игра создает поле, на котором нет совпадений трех и более одноцветных
#
- Вы можете перемещать квадраты только на соседнее поле, сдвигая их вверх, вниз, влево или вправо.
- При перемещении квадратов, которые не образуют группу из трех и более квадратов в ряд, ход не принимается, и положение квадратов остается неизменным.
- За каждое совпадение трех и более квадратов в ряд, называемых кластером, игрок получает очки. За 3 квадрата в ряд начисляется 100 очков, а за каждый дополнительный квадрат в ряд дополнительно начисляется 100 очков. Например, за 4 квадрата в ряд игрок получает 200 очков, за 5 квадратов - 300 очков и так далее.
- В начале игры не может создаться кластер. Игра специально создает такой порядок на поле, где нет совпадений трех и более квадратов изначально.
- Если все доступные ходы закончились или истек таймер (120 секунд), игрок увидит экран окончания игры.

---

### Квадраты (фишки) в игре
На каждом уровне игровое поле заполнено повторяющимися квадратами, которые разложены в определенном порядке. При их уничтожении новые квадраты появляются рандомно. Все квадраты можно уничтожить — создав кластер (три в ряд или больше). Количество различных фигур в игре определяется заданной темой. Всего есть 4 темы: DEFAULT, BLISS, VINTAGE, CANDY.
Опробовать их всех можно при помощь смены темы в консоли.

---

### Очки и рейтинг

Игра подсчитывает общее количество набранных очков игрока. Чем больше очков, тем выше позиция игрока в рейтинге.

---

### Интерфейс

В игре предусмотрен простой и интуитивно понятный интерфейс пользователя. GUI состоит из игрового поля, кнопок управления и отображения набранных очков и шкалы оставшегося времени.

---

### Консоль

Также в игру встроена своя игровая консоль. Открыть её можно нажав на кнопку 'ё' (на русской раскладке) или же '`' (на английской раскладке).

> # help
> Выводит в консоль все доступные для ввода команды.

> # toggle_movies
> Включает отображение доступных ходов при помощи вспомогательных линий на экране игры.

> # history
> Выводит в консоль историю всех запросов игрока в консоль.

> # new_game
> Создаёт новую игру, сбрасывая старую.

> # end_game
> Заканчивает игру досрочно.

> # clear_line_row_?
> Принимает на вход горизонтальную линию (отсчёт идёт от 0) и удаляет её.

> # clear_line_column_?
> Принимает на вход вертикальную линию (отсчёт идёт от 0) и удаляет её.

> # sound_mute
> Отключает звук в игре.

> # sound_unmute
> Включает звук в игре.

> # sound_dec
> Уменьшает звук на 10 процентов.

> # sound_inc
> Увеличивает звук на 10 процентов.

> # swap_tiles_?\_?\_?_?
> Принимает на вход x1, y1, x2, y2 и пытается поменять блоки местами.

> # toggle_fps
> Включает отображение fps в интерфейсе

> # clear_color_?
> Принимает на вход цифру (от 0) с номером цвета и очищает все блоки с этим цветом.
